#include <iostream>
#include <cstring>
#define MAX_SITE 100
using namespace std;

int main(){
	//输入数据
	int n;
	cin >> n;
	int table[MAX_SITE+1][MAX_SITE+1];
	memset(table, 0, sizeof(table));
	for(int i = 1; i <= n; i++)
		for(int j = i + 1; j <= n; j++)
			cin >> table[i][j];

	//初始化result为0, result[i]表示从第i站到最后一站的最小费用
	int result[MAX_SITE+1];
	memset(result, 0, sizeof(result));

	//DP
	for(int i = n - 1; i >= 1; i--){
		int min;
		memset(&min, 0x7f, sizeof(int));
		for(int j = i + 1; j <= n; j++){
			//费用由两部分组成,第一部分为直接到达table[i][j] 第二部分为从第j站直接到达最后一站的最小费用
			if(min > table[i][j] + result[j]) min = table[i][j] + result[j];
		}
		result[i] = min;
	}
	//输出从第1站到最后一战的最小费用
	cout << result[1] << endl;
}
